#include <tr1/memory>
#include <iostream>

using namespace std;
using namespace tr1;

typedef shared_ptr<int> PointeurInt;

int main ()
{
	//On crée un shared_ptr<int>
    PointeurInt n1(new int(4));
	//On fait cibler un nouveau Pointeur vers la même cible que n1
    PointeurInt n2, n4;
    PointeurInt n3 (new int(2));

    n2=n1;	//n2 pointe désormais sur la même cible que n1
    n4=n3;	//n4 vers cible de n3


    cout << n1.use_count() << endl;
    cout << n3.use_count() << endl;

    n4=n1;
    n3=n1;
    //Plus personne ne pointe l'ancienne cible de n3, il est donc détruit

    // Affiche le nombre de pointeurs qui pointe vers la même pièce
    cout << n1.use_count() << endl;		// =4

    n3.reset();	//On détruit n3
    cout << n1.use_count() << endl;		//=3

    n1.reset();
    n2.reset();
    cout << n4.use_count() << endl;		//=1

    n4.reset();

	//Plus personne ne pointe la cible, elle est détruite.
}

//On a essayé de compiler et de faire fonctionner ce programme, mais rien n'y fait....
